#ifndef __SLIST_H__
#define __SLIST_H__

/* 键盘输入函数 */
#define my_scanf(op, format, ...) do{   \
    int ret = 0;                        \
    ret = scanf(format, __VA_ARGS__);   \
    while ('\n' != getchar())           \
        /* do nothing */;               \
    if (ret < 0)                        \
        goto op;                        \
} while (0)                             \

/* 函数定义 */
typedef int(*ft1)(void *data); 

/* 节点定义 */
typedef struct _node_t
{
    void *data;                 /* 数据域 */
    struct _node_t *next;       /* 指针域 */
}node_t;

/* 头信息结构体定义 */
typedef struct _slist_t
{
    node_t *p;              /* 指向头结点指针 */
    int size;               /* 类型大小 */
    int count;              /* 节点个数 */
    ft1 my_destroy;         /* 销毁函数 */
}slist_t;


/* 头结点创建函数 */
int slist_create(slist_t **s, int size, ft1 destroy);
/* 链表尾插 */  
int slist_append(slist_t *s, void *data);
/* 链表的遍历 */
int slist_traverse(slist_t *s, ft1 print);
/* 链表的销毁 */    
int slist_destroy(slist_t *s);














#endif /* __SLIST_H__ */